/*=============== 模块调用方法说明 =======================
* 1, 在硬件实现文件"flash_operate.h"中定义宏
f_Iap_FlagWrite() : 标志位写函数
f_Iap_FlagRead():标志位读函数
f_Iap_WriteOneByte():单字节写函数
f_Iap_FlagErase():标志位擦除函数
f_Iap_Erase_All():擦除函数
f_Iap_Remap():将备份区的程序写入APP区
 … ...
=========================================================*/
#ifndef __FLASH_OPERATE_H__
#define __FLASH_OPERATE_H__
#include "cms80f761xx.h"
//#include "macro.h"
 // 标志位相关变量和宏
#define DATA_BUFF_ADDR           0X000		        //Date Flash的起始位置
#define DATA_BUFF_SIZE           (0x3ff - DATA_BUFF_ADDR + 1)	//Date Flash缓存区最大长度
#define IAP_CHECK_LENGTH		sizeof(u8IapCheckNum)	//更新成功标志位最大长度
#define	BUFF_CHECK_NUMBER		0X55,0X66,0X77 //表示Date Flash缓存区装载完备的数字码，最大DATA_BUFF_SIZE
static const u8  u8IapCheckNum[]={BUFF_CHECK_NUMBER};	//备份区更新完成标志

// APP区相关变量和宏 30K
#define APP_START_ADDR     0X0000	//APP Flash的起始位置
#define APP_END_ADDR       0X7800	//APP Flash的结束位置
#define APP_SIZE           (APP_END_ADDR - APP_START_ADDR)	//APP Flash最大长度

// BUFF区相关变量和宏 30K
#define BUFF_START_ADDR     0X7800	//BUFF Flash的起始位置
#define BUFF_END_ADDR       0Xf000	//BUFF Flash的结束位置
#define APP_BUFF_SIZE           (BUFF_END_ADDR - BUFF_START_ADDR)	//BUFF Flash最大长度

#define ONE_PAGE_SIZE      		512      			//一页的长度
#define	APROM_AREA	            0x55				//APROM区
#define DATA_AREA               0xAA				//DATA区
#define LDROM_AREA	            0X96				//LDROM区
#define APROM_BUFF_AREA			0x69				//APP BUFF备份区

u8 f_Iap_FlagWrite(u32 addr , u8 area ,u8 *pdat);
u8 f_Iap_FlagRead(u32 addr , u8 area ,u8 *pdat);
u8 f_Iap_WriteOneByte(u32 addr ,u8 area ,u8 dat);
void f_Iap_FlagErase(u32 addr , u8 area);
void f_Iap_Erase_All(u8 area);
void f_Iap_Remap();
#endif
/**** (c) 火星人厨具*************************** END OF FILE **/
